package appli_gui;


import java.awt.*;

import javax.swing.*;

import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.awt.Dimension;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import java.awt.image.BufferedImage;
import java.awt.Dimension;
import java.io.IOException;

public class gui extends JFrame
{
	ServerSocket servSocket;
	Socket s;
	
	private static final int WIDTH = 400;
	private static final int HEIGHT = 300;
	
	private JLabel etat, message, lengthL, widthL, areaL;
	private JTextField lengthTF, widthTF, areaTF;
	private JButton calculateB, exitB;
	
	//Button handlers:
	private CalculateButtonHandler cbHandler;
	private ExitButtonHandler ebHandler;
	
	 PrintWriter pw;
	 BufferedReader br;
	
	public gui()
	{
		etat = new JLabel("", SwingConstants.LEFT);
		message = new JLabel("", SwingConstants.LEFT);
		lengthL = new JLabel("Enter the length: ", SwingConstants.RIGHT);
		widthL = new JLabel("Enter the width: ", SwingConstants.RIGHT);
		areaL = new JLabel("Area: ", SwingConstants.RIGHT);
		
		lengthTF = new JTextField(10);
		widthTF = new JTextField(10);
		areaTF = new JTextField(10);
		
		calculateB = new JButton("Calculate");
		cbHandler = new CalculateButtonHandler();
		calculateB.addActionListener(cbHandler);
		exitB = new JButton("Exit");
		ebHandler = new ExitButtonHandler();
		exitB.addActionListener(ebHandler);
		
		setTitle("Appli Serveur");
		Container pane = getContentPane();
	//	pane.setLayout(new GridLayout(7, 2));
		 pane.setLayout(null); // disable layout manager - use absolute layout
		
	    // ajouter un icone
		ImageIcon icone = new ImageIcon("d:/server.png");
		JLabel image = new JLabel(icone);
		pane.add(image);
		
		
		// icon de l'appli
	    Image img = Toolkit.getDefaultToolkit().getImage("d:/server.png");
	    setIconImage(img);
	 
	    JPanel p1 = new JPanel();
	      p1.setBounds(30, 30, 100, 100);
	      p1.setBackground(Color.RED);
	      pane.add(p1);
	      
	      JPanel p2 = new JPanel();
	      p2.setBounds(150, 50, 120, 80);
	      p2.setBackground(Color.BLUE);
	      pane.add(p2);
	 
	    
	    //setResizable(false);
	    //setSize(10, 20);
	    //setVisible(true);
		
		
		//Add things to the pane in the order you want them to appear (left to right, top to bottom)
		pane.add(etat);
		pane.add(message);
		//pane.add(lengthL);
		//pane.add(lengthTF);
		//pane.add(widthL);
		//pane.add(widthTF);
		//pane.add(areaL);
		//pane.add(areaTF);
		pane.add(calculateB);
		pane.add(exitB);
		
		setSize(WIDTH, HEIGHT);
		setLocationRelativeTo(null);
		setVisible(true);
		pane.setBackground(Color.ORANGE);  
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		
		try{
			   servSocket = new ServerSocket(8081);//Socket for server
			   etat.setText("Le serveur attend la connexion d'un client sur le port 8081");
			   Socket fromClientSocket = servSocket.accept();
			   etat.setText("Le serveur est reli  un client");
			   PrintWriter pw = new PrintWriter(fromClientSocket.getOutputStream(), true);
			   BufferedReader br = new BufferedReader(new InputStreamReader(fromClientSocket.getInputStream()));
			   String str = br.readLine();
			   message.setText("Rception : " + str);
			   
			   
			   
			// Get a communication stream associated with the socket
			   OutputStream s1out = fromClientSocket.getOutputStream();
			   DataOutputStream dos = new DataOutputStream (s1out);
			   // Send a string!
			   dos.writeUTF("Vive l't");
			   // Close the connection, but not the server socket
			   dos.close();
			   s1out.close();
			   fromClientSocket.close();
			   
			   //below line reads input from InputStreamReader
			   //br=new BufferedReader(new InputStreamReader(s.getInputStream()));
			   //below line writes output to OutPutStream
			   //pw=new PrintWriter(s.getOutputStream(),true);
		 }
		 catch(Exception e)
		 {
		 }
	}
	
	private class CalculateButtonHandler implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			double width, length, area;
			
			length = Double.parseDouble(lengthTF.getText()); //We use the getText & setText methods to manipulate the data entered into those fields.
			width = Double.parseDouble(widthTF.getText());
			area = length * width;
			
			areaTF.setText("" + area);
		}
	}
	
	public class ExitButtonHandler implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			System.exit(0);
		}
	}
	
	public static void main(String[] args) throws IOException
	{
		gui appli = new gui();
		//appli.setSize(new Dimension(300, 200));
		//BufferedImage image = ImageIO.read(appli.getClass().getResource("/colors.jpg"));
		//appli.setIconImage(image);
		
		/* BufferedImage image = null;
	        try {
	            image = ImageIO.read(appli.getClass().getResource("d:/server.png"));
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        appli.setIconImage(image);
		*/
	    
	        
	}
	
}
